package com.xiaoshuidi.cloud.module.iot.infrastructure.remote;

import cn.hutool.json.JSONObject;
import com.tuya.connector.api.annotations.*;
import com.xiaoshuidi.cloud.module.iot.infrastructure.remote.dto.*;

import java.util.List;
import java.util.Map;

public interface TuYaDeviceConnector {

    /**
     * 获取密码加密的临时秘钥
     * @param device_id
     * @return
     */
    @POST("/v1.0/devices/{device_id}/door-lock/password-ticket")
    PasswordTicketDTO getPasswordTicket(@Path("device_id") String device_id);


    /**
     * 创建临时密码
     * @param device_id
     * @param commands
     * @return
     */
    @POST("/v1.0/devices/{device_id}/door-lock/temp-password")
    TempPasswordDTO getTempPassword(@Path("device_id") String device_id, @Body GetTempPasswordReqDTO commands);

    /**
     * 获取临时密码信息
     * @param device_id
     * @param password_id
     * @return
     */
    @GET("/v1.0/devices/{device_id}/door-lock/temp-password/{password_id}")
    GetTempPasswordInfoDTO getTempPasswordInfo(@Path("device_id") String device_id, @Path("password_id") String password_id);

    /**
     * 同步密码 Zigbee 门锁创建密码后，密码状态仍处于"配置中"，可调用该接口将服务器中处于“配置中”的密码同步给门锁，该接口同一个设备 60 秒内只允许下发一次。
     * @param device_id
     * @param commands
     * @return
     */
    @POST("/v1.0/devices/{device_id}/door-lock/issue-password")
    Boolean issuePassword(@Path("device_id") String device_id,@Body IssuePasswordReqDTO commands);

    /**
     * 获取临时密码
     * @param device_id
     * @param password_id
     * @return
     */
    @GET("/v1.0/devices/{device_id}/door-lock/temp-password/{password_id}")
    String getTempPasswordByPasswordId(@Path("device_id") String device_id, @Path("password_id") String password_id);

    /**
     * 获取临时密码列表
     * @return
     */
    @GET("/v1.0/devices/{device_id}/door-lock/temp-passwords")
    String getTempPasswords(@Path("device_id") String device_id,@QueryMap Map<String,Object> commands);

    /**
     * 修改临时密码
     * @param device_id
     * @param password_id
     * @param commands
     * @return
     */
    @PUT("/v1.0/devices/{device_id}/door-lock/temp-passwords/{password_id}/modify-password")
    Boolean modifyTempPassword(@Path("device_id") String device_id, @Path("password_id") String password_id, @Body ModifyTempPasswordReqDTO commands);

    /**
     * 冻结临时密码
     * @param device_id
     * @param password_id
     * @return
     */
    @PUT("/v1.0/devices/{device_id}/door-lock/temp-passwords/{password_id}/freeze-password")
    Boolean freezePassword(@Path("device_id") String device_id, @Path("password_id") String password_id);

    /**
     * 解冻临时密码
     * @param device_id
     * @param password_id
     * @return
     */
    @PUT("/v1.0/devices/{device_id}/door-lock/temp-passwords/{password_id}/unfreeze-password")
    Boolean unfreezePassword(@Path("device_id") String device_id, @Path("password_id") String password_id);

    /**
     * 删除临时密码
     * @param device_id
     * @param password_id
     * @return
     */
    @DELETE("/v1.0/devices/{device_id}/door-lock/temp-passwords/{password_id}")
    Boolean deleteTempPassword(@Path("device_id") String device_id, @Path("password_id") String password_id);

    /**
     * 获取动态密码
     * @param device_id
     * @return
     */
    @GET("/v1.0/devices/{device_id}/door-lock/dynamic-password")
    String getDynamicPassword(@Path("device_id") String device_id);

    /**
     * 获取离线临时密码
     * @param device_id
     * @return
     */
    @POST("/v1.0/devices/{device_id}/door-lock/offline-temp-password")
    OfflineTempPasswordDTO getOfflineTempPassword(@Path("device_id") String device_id,@Body GetOfflineTempPasswordReqDTO commands);

    /**
     * 更新离线密码的名称
     * @param device_id
     * @param password_id
     * @return
     */
    @PUT("/v1.0/devices/{device_id}/door-lock/offline-temp-password/{password_id}")
    String setOfflineTempPassword(@Path("device_id") String device_id, @Path("password_id") String password_id,@Body Map<String,Object> commands);


    /**
     * 获取开门记录
     * @param device_id
     * @param queries
     * @return
     */
    @GET("/v1.0/devices/{device_id}/door-lock/open-logs")
    OpenLogsDTO getOpenLogs(@Path("device_id") String device_id,@QueryMap Map<String,Object> queries);

    /**
     * 清空临时密码
     * @param device_id
     * @return
     */
    @POST("/v1.0/devices/{device_id}/door-lock/temp-passwords/rest-password")
    String restPassword(@Path("device_id") String device_id);

    /**
     * 获取用户帐号所关联的设备列表
     * @param uid
     * @param page_no
     * @param page_size
     * @return
     */
    @GET("/v1.0/smart-lock/users/{uid}/devices")
    SmartLockDevices getSmartLockDevices(@Path("uid") String uid, @Query("page_no")Integer page_no, @Query("page_size")Integer page_size);

    /**
     * 获取设备信息
     * @param device_id
     * @return
     */
    @GET("/v1.0/devices/{device_id}")
    DeviceDTO getDeviceInfo(@Path("device_id") String device_id);


    @GET("/v1.0/iot-01/associated-users/devices")
    SmartLockDevices getDevices(@QueryMap Map<String,Object> queries);










}
